bitkeeper revision 1.1159.1.363 (418a0575yNZLM5woi8ymt4nfB0T_xA)
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Thu, 4 Nov 2004 10:33:25 +0000 (10:33 +0000)
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Thu, 4 Nov 2004 10:33:25 +0000 (10:33 +0000)
Cset exclude: mwilli2@equilibrium.research|ChangeSet|20041104003258|47721

tools/python/xen/sv/Daemon.py
tools/python/xen/util/ip.py
tools/python/xen/xend/server/SrvDaemon.py
tools/python/xen/xend/server/blkif.py
tools/python/xen/xend/util.py

index 164a0b165647ce59cd8234571bc1bdc99048631c..8aeb58720e48fb0cb5fdaf7cbc2d6865e495bbef 100644 (file)
@@ -30,7 +30,7 @@ class Daemon:
         cmdex = '(?P<cmd>.*)'
         procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
         xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
-        procs = util.popen('ps -e -o pid,args')
+        procs = util.popen('ps -e -o pid,args 2>/dev/null')
         for proc in procs:
             pm = procre.match(proc)
             if not pm: continue
@@ -58,7 +58,7 @@ class Daemon:
             return 0
         # Read the pid of the previous invocation and search active process list.
         pid = open(PID_FILE, 'r').read()
-        lines = util.popen('ps ' + pid).readlines()
+        lines = util.popen('ps ' + pid + ' 2>/dev/null').readlines()
         for line in lines:
             if re.search('^ *' + pid + '.+xensv', line):
                 if not kill:
index 855a517f508722305a523ba736c48bab71bf4ec3..d130f194211d1db56c8a7344144698d5eaf68c83 100644 (file)
@@ -51,7 +51,7 @@ def get_current_ipaddr(dev='eth0'):
 
     returns interface address as a string
     """
-    fd = util.popen( '/sbin/ifconfig ' + dev )
+    fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
     lines = _readlines(fd)
     for line in lines:
         m = re.search( '^\s+inet addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
@@ -69,7 +69,7 @@ def get_current_ipmask(dev='eth0'):
 
     returns interface netmask as a string
     """
-    fd = util.popen( '/sbin/ifconfig ' + dev )
+    fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
     lines = _readlines(fd)
     for line in lines:
         m = re.search( '^.+Mask:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
index 010249fc836ea1a033c256abd641d77b862a0bd8..a95e1124d7ed5134e80b2dfedd2d270ce6930b04 100644 (file)
@@ -337,7 +337,7 @@ class Daemon:
         cmdex = '(?P<cmd>.*)'
         procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
         xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
-        procs = util.popen('ps -e -o pid,args')
+        procs = util.popen('ps -e -o pid,args 2>/dev/null')
         for proc in procs:
             pm = procre.match(proc)
             if not pm: continue
@@ -383,7 +383,7 @@ class Daemon:
         """
         running = 0
         if pid:
-            lines = util.popen('ps %d' % pid).readlines()
+            lines = util.popen('ps %d 2>/dev/null' % pid).readlines()
             exp = '^ *%d.+%s' % (pid, name)
             for line in lines:
                 if re.search(exp, line):
index c8d7032fce5b060b937ebca3f9a0b9586b72f8e3..df326134704f9693353706901d4c8e16f1b071d2 100755 (executable)
@@ -26,7 +26,7 @@ def expand_dev_name(name):
 def check_mounted(self, name):
     mode = None
     name = expand_dev_name(name)
-    lines = util.popen('mount').readlines()
+    lines = util.popen('mount 2>/dev/null').readlines()
     exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
     for line in lines:
         pm = exp.match(line)
index fcce7bc1fa375876d03c6177ab4e9ad58e490859..111d8cd011bd5e303bb2624ad5768142c9adde5f 100644 (file)
@@ -3,12 +3,9 @@
 
 from twisted.internet import utils
 from twisted.internet import reactor
-from twisted.internet import protocol
 from XendLogging import log
 from StringIO import StringIO
 
-import os
-
 # This is rather distasteful.  Twisted doesn't play nicely with Python's
 # standard os.popen, so here's an implementation of a synchronous popen that
 # should work reliably. - MAW
@@ -17,30 +14,22 @@ def popen(cmd):
 
     done_flag = False
     result = ''
+    
+    def done(output):
+        global done_flag, result
+        done_flag = True
+        result = output
+
+    def err(output):
+        global done_flag
+# For normal use, suppress debug output here.  It grumbles about stderr if the
+# program exits with $? != 0, even if stderr is redirected.  Grrr!
+#        log.debug("util.popen(\'%s\'): %s" % (cmd, output))
+        done_flag = True
+
+    d = utils.getProcessOutput(cmd)
+    d.addCallbacks(done, err)
 
-    class PopenProtocol(protocol.ProcessProtocol):
-        def connectionMade(self):
-            self.transport.closeStdin() # we don't want stdin
-        def outReceived(self, data):
-            global result
-            result = result + data
-#        def errReceived(self, errdata):
-#            log.debug("popen: %s" % errdata)
-        def processEnded(self,status_obj):
-            code = status_obj.value.exitCode
-            if code:
-                # todo: Should consider throwing an exception here.
-                log.debug("popen: process exit with code %d" % code)
-            global done_flag
-            done_flag = True
-
-    # using cmd.split is quick and dirty.  OK as long as people don't try anything
-    # tricky with quotes, etc.
-    args = cmd.split(' ')
-    reactor.spawnProcess(PopenProtocol(), args[0], args, os.environ)
-
-    # Ick!  Sit and ask the reactor to do IO, until the process finishes.
-    # Can't just do "pass" here because then the reactor won't run at all :-(
     while not done_flag:
         reactor.iterate()